package com.zhunaer.service;

import com.zhunaer.entity.User;
import java.math.BigDecimal;

/**
 * UserService 接口定义了与用户相关的业务逻辑操作，
 * 涵盖了用户的查找、创建、更新、余额管理、注册、登录等功能。
 */
public interface UserService {
    /**
     * 根据用户名查找用户信息。
     *
     * @param username 要查找的用户的用户名
     * @return 如果找到对应的用户，则返回该用户对象；若未找到，返回 null
     */
    User findByUsername(String username);

    /**
     * 创建一个新用户。
     *
     * @param user 包含新用户信息的 User 对象
     * @return 如果用户创建成功，返回 1；若创建失败，返回 0
     */
    int createUser(User user);

    /**
     * 更新用户信息。
     *
     * @param user 包含要更新信息的 User 对象
     * @return 如果用户信息更新成功，返回 1；若更新失败，返回 0
     */
    int updateUser(User user);

    /**
     * 更新用户账户余额。
     *
     * @param userId 用户的唯一标识符
     * @param amount 要更新的余额数值，正数表示充值，负数表示扣除
     * @return 如果余额更新成功，返回 1；若更新失败，返回 0
     */
    int updateBalance(int userId, BigDecimal amount);

    /**
     * 从用户账户中扣除指定金额。
     *
     * @param user 要扣除余额的用户对象
     * @param amount 要扣除的金额
     */
    void deductBalance(User user, BigDecimal amount);

    /**
     * 根据用户 ID 获取用户信息。
     *
     * @param userId 用户的唯一标识符
     * @return 如果找到对应的用户，则返回该用户对象；若未找到，返回 null
     */
    User getUserById(int userId);

    /**
     * 用户注册功能。
     *
     * @param user 包含新用户注册信息的 User 对象
     * @return 如果注册成功，返回 true；若注册失败，返回 false
     */
    boolean register(User user);

    /**
     * 用户登录功能。
     *
     * @param username 用户的登录名
     * @param password 用户的登录密码
     * @return 如果用户名和密码匹配，返回对应的用户对象；若不匹配，返回 null
     */
    User login(String username, String password);

    /**
     * 更新用户的基本信息。
     *
     * @param user 包含要更新信息的 User 对象
     * @return 如果更新成功，返回 true；若更新失败，返回 false
     */
    boolean updateUserInfo(User user);

    /**
     * 用户账户充值功能。
     *
     * @param userId 用户的唯一标识符
     * @param amount 要充值的金额
     * @return 如果充值成功，返回 true；若充值失败，返回 false
     */
    boolean recharge(int userId, BigDecimal amount);
}